/**
 * 任务模板
 * 
 * 使用方法：
 * 1. 复制此文件夹（_template）到tasks目录下
 * 2. 重命名文件夹为你的任务名称（例如：amazon、ebay等）
 * 3. 修改此文件中的配置
 * 4. 在 tasks.config.js 中添加或移除此任务即可启用/禁用
 */
module.exports = {
    // ==================== 基本配置 ====================
    
    // 任务名称（必填）
    name: '任务模板',
    
    // 是否启用此任务（必填）
    // 设置为 false 可以临时禁用任务而不删除文件
    enabled: false,
    
    // 目标网站URL（必填）
    url: 'https://www.example.com',
    
    // ==================== 可选配置 ====================
    
    // 搜索配置（可选）
    search: {
        url: 'https://www.example.com/search',
        selectors: {
            searchInput: '#search-input',
            searchButton: '#search-button',
        }
    },
    
    // 页面元素选择器（可选）
    selectors: {
        productList: '.product-item',
        productTitle: '.product-title',
        productPrice: '.product-price',
        productImage: '.product-image img',
        productLink: '.product-link'
    },
    
    // 爬取选项（可选）
    crawlOptions: {
        maxPages: 10,                 // 最大爬取页数
        delayBetweenPages: 2000,      // 页面间延迟（毫秒）
        waitForSelector: '.product-item', // 等待的选择器
        timeout: 30000                // 超时时间（毫秒）
    },
    
    // ==================== 自定义爬取逻辑 ====================
    
    /**
     * 自定义爬取逻辑（可选但推荐）
     * 
     * @param {Page} page - Playwright页面对象
     *   - page.goto(url) - 导航到URL
     *   - page.waitForSelector(selector) - 等待元素出现
     *   - page.$(selector) - 查询单个元素
     *   - page.$$(selector) - 查询多个元素
     *   - page.evaluate(fn) - 在页面上下文中执行函数
     *   - page.click(selector) - 点击元素
     *   - page.type(selector, text) - 输入文本
     *   - page.screenshot() - 截图
     * 
     * @param {EcommerceCrawler} crawler - 爬虫实例
     *   - crawler.browser - 浏览器实例
     *   - crawler.page - 当前页面
     *   - crawler.config - 爬虫配置
     * 
     * @returns {Object} 爬取结果对象
     *   必须返回对象，包含：
     *   - success: true/false
     *   - 其他自定义字段
     */
    async customCrawl(page, crawler) {
        console.log(`🎯 正在爬取【${this.name}】...`);
        
        try {
            // ========== 步骤1：等待页面加载 ==========
            await page.waitForTimeout(2000);
            
            // ========== 步骤2：获取页面基本信息 ==========
            const title = await page.title();
            const url = page.url();
            
            console.log(`   页面标题: ${title}`);
            console.log(`   页面URL: ${url}`);
            
            // ========== 步骤3：提取数据（示例） ==========
            
            // 示例1：使用选择器提取数据
            const products = await page.$$eval(this.selectors.productList, (elements) => {
                return elements.slice(0, 10).map(el => ({
                    title: el.querySelector('.product-title')?.textContent?.trim(),
                    price: el.querySelector('.product-price')?.textContent?.trim(),
                }));
            });
            
            // 示例2：点击按钮
            // const button = await page.$(this.selectors.searchButton);
            // if (button) {
            //     await button.click();
            //     await page.waitForTimeout(2000);
            // }
            
            // 示例3：填写表单
            // await page.type(this.selectors.searchInput, '搜索关键词');
            
            // 示例4：滚动页面
            // await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
            
            // 示例5：截图
            // await page.screenshot({ path: `screenshots/${this.name}.png` });
            
            // ========== 步骤4：返回结果 ==========
            return {
                success: true,
                url: url,
                title: title,
                timestamp: new Date().toISOString(),
                data: {
                    products: products || [],
                    // 在这里添加更多爬取到的数据
                }
            };
            
        } catch (error) {
            console.error(`❌ 爬取【${this.name}】失败:`, error.message);
            return {
                success: false,
                error: error.message,
                timestamp: new Date().toISOString()
            };
        }
    }
};

